package se.study.algorithm;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @author JOJIN
 * @version V2.0
 * @ClassName: SecurityUtil
 * @Description: 加密工具箱
 * @date 2015年11月28日 上午11:57:08
 */
public class MD5Util {


    /**
     * @param str
     * @return 16位MD5加密
     */
    public static String md5x16bit(String str) {
        try {
            return calculate(str).toString().substring(8, 24);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }


    /**
     * @param str
     * @return 32位MD5加密
     */
    public static String md5x32bit(String str) {
        try {
            if (str != null) {
                return calculate(str).toString();
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }

    private static StringBuffer calculate(String str) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(str.getBytes());
        byte[] byteDigest = md.digest();
        int i;
        StringBuffer buf = new StringBuffer("");
        for (int offset = 0; offset < byteDigest.length; offset++) {
            i = byteDigest[offset];
            if (i < 0) {
                i += 256;
            }
            if (i < 16) {
                buf.append("0");
            }
            buf.append(Integer.toHexString(i));
        }
        return buf;
    }

}
